<!DOCTYPE html>
<html>

<head>
	<meta charset="UTF-8" />
	<title>回顾Object.defineProperty方法</title>
</head>

<body>
	<script type="text/javascript">
		let number = 18
		let person = {
			name: '张三',
			sex: '男',
		}

		Object.defineProperty(person, 'age', {
			// 基本配置项
			// value: 18,

			// enumerable:true, 	 //控制属性是否可以枚举,默认值是false
			// configurable:true,  //控制属性是否可以被删除,默认值是false
			// writable:true, 		 //控制属性是否可以被修改,默认值是false


			// 高级配置项
			//当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
			get() {
				console.log('有人读取age属性了')
				return number
			},

			//当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
			set(value) {
				console.log('有人修改了age属性, 且值是', value)
				number = value
			}
		})

		// Object.defineProperty(person,"age",{
		// 	configurable:true
		// })



		console.log('person:', person)

		// 遍历对象
		console.log('Object.keys:', Object.keys(person))

		// for in 循环
		for (key in person) {
			console.log('for in:', person[key])
		}

		// for of 循环 不可遍历对象	不是可迭代的
		// for ( key of person) {
		// 	console.log('for of:', key)
		// }
	</script>
</body>

</html>